package com.it.a02polymorphismdemo2;

public class Person {
    /*
    类定义：
    public class Person：定义了一个名为Person的公共类。
    属性：
    注释中提到了两个属性：姓名和年龄。
    行为：
    keepPet(Dog dog, String something)方法：功能是喂养宠物狗，其中something表示喂养的东西。
    keepPet(Cat cat, String something)方法：功能是喂养宠物猫，其中something表示喂养的东西。
    构造方法：
    注释中提到需要生成空参构造和有参构造，以及set和get方法。
    测试类：
    定义了一个测试类，用于完成特定的打印效果。
    keepPet(Dog dog, String something)方法的打印内容示例：
    描述饲养员的信息，例如“年龄为30岁的老王养了一只黑颜色的2岁的狗”。
    描述狗在吃东西时的情景，例如“2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃”。
    keepPet(Cat cat, String something)方法的打印内容示例：
    描述饲养员的信息，例如“年龄为25岁的老李养了一只灰颜色的3岁的猫”。
    描述猫在吃东西时的情景，例如“3岁的灰颜色的猫咪着眼睛侧着头吃鱼”。
     */
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /*//饲养狗
    public void keepPet(Dog dog,String something){
        System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+dog.getColor()+"颜色的"+dog.getAge()+"岁的狗");
        dog.eat(something);
    }

    //饲养猫
    public void keepPet(Cat cat,String something){
        System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+cat.getColor()+"颜色的"+cat.getAge()+"岁的狗");
        cat.eat(something);
    }*/

    //想要一个方法，能接收所有的动物，包括猫和狗
    //方法的形参可以写成这些类的父类Animal
    public void keepPet(Animal a,String something) {
        if(a instanceof Dog d){
            System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+a.getColor()+"颜色的"+a.getAge()+"岁的狗");
            a.eat(something);
        }else if(a instanceof Cat c){
            System.out.println("年龄为"+getAge()+"岁的"+getName()+"养了一只"+a.getColor()+"颜色的"+a.getAge()+"岁的狗");
            a.eat(something);
        }else{
            System.out.println("没有这种动物");
        }
    }
}
